Не удается вставить запрос MySQL в Rails 5 (курс Lynda) - PullRequest
0 голосов
/ 29 августа 2018

Я прохожу курс на Lynda.com (Ruby on Rails 5 Essential Training), и у меня возникла проблема с добавлением записи в таблицу. Вот некоторые подробности: Цель состоит в том, чтобы создать объединенную таблицу, ассоциацию «многие ко многим», поэтому мы сначала пытаемся создать запись для таблиц, которые мы хотим использовать в новой таблице. И каждый раз, когда я пишу эту строку:

section = Sections.create(:name => "Section One", :position => 1)

Это дает мне это

    (0.2ms)  BEGIN
   (0.3ms)  ROLLBACK
 => #<Section id: nil, page_id: nil, name: "Section One", position: 1, visible: false, content_type: nil, content: nil, created_at: nil, updated_at: nil> 

Я проверил свой код, и все, кажется, хорошо. Кстати вставка записей на другие таблицы работает. Это просто этот стол.

один важный момент, эта таблица является ранее созданной таблицей. Это новый, который мы пытаемся создать.

Что я делаю не так?

Вот мой код из миграции:

class CreateSections < ActiveRecord::Migration[5.2]

  def up
    create_table :sections do |t|

      t.integer   "page_id"
      t.string    "name"
      t.integer   "position"
      t.boolean   "visible", :default => false
      t.string    "content_type"
      t.text      "content"
      t.timestamps
    end
    add_index("sections", "page_id")
  end

  def down
    drop_table :sections
  end


end

Вот модель сечения:

class Section < ApplicationRecord

belongs_to :page
has_many :section_edits


end

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ошибка вызвана: belongs_to :page, поскольку page_id равно nil, и по умолчанию Rails belongs_to помощник добавляет проверку присутствия, чтобы убедиться, что ассоциация действительна.

Чтобы отключить это поведение (проверку присутствия), вы можете использовать:

belongs_to :page, optional: true

как указано здесь: https://guides.rubyonrails.org/association_basics.html#options-for-belongs-to

или вы можете добавить page_id к вашему Section.create вызову, как упоминалось другими:

page_id = 1 # or Page.first.id or any page id you need
section = Section.create(name: "Section One", position: 1, page_id: page_id)
0 голосов
/ 29 августа 2018

Ваша ошибка исходит от belongs_to :page
Если вы попробуете с create!, вы должны увидеть это сообщение об ошибке:

ActiveRecord :: RecordInvalid: проверка не удалась: страница должна существовать

Просто добавьте page_id в вашем разделе создания:

page_id = 1 # or Page.first.id or any page id you need
section = Section.create(name: "Section One", position: 1, page_id: page_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...